runlevel(7) | Miscellaneous Information Manual | runlevel(7) |
名前¶
runlevel - システムランレベルの変更を通知するイベント
書式¶
runlevel RUNLEVEL=RUNLEVEL PREVLEVEL=PREVLEVEL [ENV]...
説明¶
このページは runlevel Upstart イベントと Upstart システムに於けるランレベルの一般的な実装について記述する。ランレベルツールについては runlevel(8) を参照のこと。
runlevel イベント¶
runlevel イベントはシステムランレベルの変更を通知する。新しいシステムランレベルは引数 RUNLEVEL で与えられ、前のランレベルは引数 PREVLEVEL で与えられる (なければ空)。
追加の環境変数は、イベントを発行したツールやランレベルに応じてこれらの後に続く。 shutdown(8) ツールは -H または -P でそれぞれ呼び出した場合に、 HALT または POWEROFF のどちらかを INIT_HALT 変数に設定して渡す。
ランレベル¶
ランレベルとは init(8) デーモンやシステム動作のモードを定義するために他のシステム初期化のシステムで使用されている UNIX® System V系の概念である。
8つのランレベルが利用可能で、最初の7つは番号付けされた 0-6 と、8つ目は S あるいは s と名前付けされている (両方利用可能)。
サービスや他のシステムコンポーネントは 1 つまたは複数のランレベルに存在し、 あるランレベルから別のランレベルへ切り替えた時、新しいランレベルに存在しないサービスは停止し、 新しいランレベルだけに存在するサービスが開始する。
これはランレベルの変更時 (Upstart システムでは runlevel イベント上で動作するジョブによって変更される) に実行される /etc/init.d/rc スクリプトによって遂行される。このスクリプトはディレクトリ /etc/rc?.d にあるシンボリックリンクを調べる。 K で始まるシンボリックリンクは停止するためのサービスで、 S で始まるシンボリックリンクは開始するためのサービスである。
このプロセスについての信頼できるドキュメントは Debian ポリシーマニュアル の System run levels and init.d scripts の項目で見つけることができる。これは現在 <http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit> で入手可能である。
ランレベル 0, 1 そして 6 は予約されている。ランレベル 0 はシステムの停止のために使用され、 6 はシステムの再起動のために使用される。ランレベル 1 はシングルユーザーモードへシステムを移行させるために使用され、その後ランレベルは S になる。
Upstart に於ける System V の初期化¶
ランレベルの互換実装では、本来の System V 系の init(8) デーモンと同じ機能を実行する runlevel イベント上での Upstart のジョブの実行を可能にする。
/etc/init/rc.conf ジョブは runlevel イベント上で動作する。従って RUNLEVEL 環境変数と PREVLEVEL 環境変数を受け取る。その単独のジョブは /etc/init.d/rc スクリプトを実行するためにあり、引数として新しいランレベルを渡す。
初期のシステムスタートアップは /etc/init/rc-sysinit.conf ジョブによって提供される。これは startup(7) イベントによって実行される。そして 特別な引数 S とともに /etc/init.d/rc スクリプトを実行し、完了後既定のランレベルへ切り替えるために telinit(8) を呼ぶ責任を負う。これは kernel コマンドライン上の代わりのランレベルを指定するのと同様に -b, emergency, -s そして single などの kernel コマンドラインオプションも処理する。
最後に /etc/init/rcS.conf ジョブはシングルユーザーランレベルへの移行やログインシェルの提供といった特殊なケースも取り扱う。 一旦シェルが終了すると、既定のランレベルへ再突入するために rc-sysinit ジョブを再起動する。
Upstart でのランレベルの実装¶
Upstart の init(8) デーモンはランレベルのネイティブな概念はもっていない。そして、System V デーモンとは違って、現在のランレベルの追跡を試みない。
代わりに Upstart で支給される runlevel(8), telinit(8) や shutdown(8) ツールによって互換実装が提供される。
telinit(8) や shutdown(8) ツールはランレベルを変更するためにシステム管理者によって使用される。従ってこれら双方のツールは 自身の保持する環境変数 ( RUNLEVEL 環境変数 ) または /var/run/utmp ファイルより PREVLEVEL 環境変数の値を取得する runlevel イベントを生成する。
また、これらのツールは新しいランレベルで /var/run/utmp ファイルを更新し、 /var/log/wtmp ファイルへログエントリを追加する。
runlevel(8) ツールは現在のランレベルを取得するためにシステム管理者によって使用される。これは 自身の環境から RUNLEVEL 環境変数または PREVLEVEL 環境変数を読み込むか、 /var/run/utmp から現在のランレベルと前のランレベルを読み込む。
who(1) -r コマンドもまた /var/run/utmp から現在のランレベルを読み込むために使用される。
これは System V との完全な互換性を提供する。
/var/run/utmp ファイルがまだ書き込み可能ではない起動スクリプト (boot scripts) を実行している間は、 RUNLEVEL 環境変数や PREVLEVEL 環境変数が利用可能である。これによって telinit(8) は正しい値を提供する。
一度起動スクリプト (boot scripts) が終了すると、環境変数が利用可能ではなくなると同時に、 /var/run/utmp ファイルは書き込み可能となり、もっとも最近の telinit(8) の呼び出しはうまく書き込むことができるはずである。
起動時間の記録¶
telinit(8) ツールは /var/run/utmp と /var/log/wtmp の双方に起動時間の記録を書き込む処理をする。
これらのファイルにある前のランレベルが環境変数から取得した前のランレベルと異なる場合に書き込まれる。 一般的には /var/run/utmp と /var/log/wtmp ファイルの双方が書き込み可能となる、ランレベル S から既定のランレベルへ変更となる時に、これは起きる。また切り替えるための telinit(8) の呼び出しはその環境で RUNLEVEL=S を持つ。
実例¶
典型的なマルチユーザーのランレベルで動作するサービスは次のように使うことができる:
start on runlevel [2345] stop on runlevel [!2345]
関連項目¶
2009-07-09 | Upstart |